<?php
namespace app\common\lib;

use think\Db;

class TaskCheck{

    //任务初审、终审
    public static function audit_pass($auditId,$check_opinion='')
    {
        //判断需要审核任务的状态，并且判断截至时间
        $auditInfo = M('com_task')->where('id', $auditId)->find();
//        var_dump($auditInfo);die;
        if(!$auditInfo)  return '任务数据不存在!';
        //判断过期时间
        switch ($auditInfo['type']) {
            case 1:         //1指定任务
                if( $auditInfo['end_time'] < time() ) return '汇报截止时间已过期';
                break;
            case 2:         // 2悬赏任务
                if( $auditInfo['apply_end_time'] < time() ) return '报名截止时间';
                break;
            default:
                return '任务数据审核时间，数据有误！';
                break;
        }

        //判断当前人是否为该任务的，审核人
        $userId = session("user_com")['id'];

        switch ($auditInfo['status']) {
            case 0:         //待初审
                if($auditInfo['first_check_user_id'] != $userId)  return '你不是该任务相关初审人，不能审核';
                $saveData['first_check_opinion'] = $check_opinion;
                $status = 1;
                break;
            case 1:         // 1待终审
                $status = $auditInfo['type'] == 1 ? 3 : 2;
                if($auditInfo['last_check_user_id'] != $userId)  return '你不是该任务相关终审人，不能审核';
                $saveData['last_check_opinion'] = $check_opinion;
                break;
            default:
                return '任务审核，数据有误！';
                break;
        }

        $saveData['id']     = $auditId;
        $saveData['status'] = $status;

//        //审核通过
        DB::startTrans();//开启事务
        try{
//            M('com_task')->isUpdate(true)->save($saveData);
            M('com_task')->update($saveData);
            if($auditInfo['type'] == 1) {
                //发放记录人奖分
                SendIntegralNew::send($auditId, 3);
            }
            DB::commit();//提交
        }catch (\Exception $e){
            DB::rollback();//回滚
            return $e->getMessage();
        }

        //推送给消息

        //  `cate_type` tinyint(2) DEFAULT '1' COMMENT '消息类型  1审核消息 2任务消息 3公告消息 4积分奖扣消息 5催审 6奖扣任务通知',
        //  `type` tinyint(2) DEFAULT NULL COMMENT '类型 1公告  2任务 3积分奖扣 4请假',

        $msgData = [
            'com_id'=>$auditInfo['com_id'],
            'relation_id'=>$auditInfo['id'],
            'name'=>$auditInfo['name'],
            'record_name'=>$auditInfo['record_user_id'],
            'first_name'=>$auditInfo['first_check_user_id'],
            'last_name'=>$auditInfo['last_check_user_id'],
        ];

        //初审通过，后续事件 todo 可加入队列执行
        $relation_id = $auditInfo['id'];
        if($status > 1) {
            $user_id = $auditInfo['last_check_user_id'];
            $title = '当前有一条任务记录需要您审核(终审)';
            \app\company\logic\Message::send_message($title, $user_id, 1, 2, $relation_id);
            //通知`last_check_user_id` '终审人',初审通过
        }

        //终审通过，后续事件 todo 可加入队列执行
        if(in_array($status, [2,3])){

            $data = [];
            $msgData['relation_id'] = $relation_id;
            //指定任务|悬赏任务：记录人
            $msgData['user_id'] = $auditInfo['record_user_id'];
            $msgData['cate_type'] = 1;
            $msgData['type'] = 2;
            $msgData['title'] = '您有任务已通过';
            $data[] = $msgData;

            //指定任务|悬赏任务：负责人
            $msgData['title'] = '当前有一条您负责的任务已发布，请在任务/公告大厅查看';
            $msgData['user_id'] = $auditInfo['principal_user_id'];
            $msgData['cate_type'] = 2;
            $data[] = $msgData;

            //指定任务|悬赏任务：参与人
            $sendTaskUsers = db('com_task_relation_take')->where('com_id', $auditInfo['com_id'])->where('task_id', $auditId)->column('user_id');
            if($sendTaskUsers) {
                $msgData['title'] = '当前有一条您参与的任务已发布，请在任务/公告大厅查看';
                foreach ($sendTaskUsers as $userId) {
                    $msgData['user_id'] = $userId;
                    $data[] = $msgData;
                }
            }

            //悬赏任务：消息推送范围人
            if($auditInfo['type'] == 2) {
                $sendTaskRelationUsers = db('com_task_relation')->where('com_id', $auditInfo['com_id'])->where('task_id', $auditId)->column('user_id');
                if($sendTaskRelationUsers) {
                    $msgData['title'] = '当前有一条您参与的任务已发布，请在任务/公告大厅查看';
                    foreach ($sendTaskRelationUsers as $user_id) {
                        $msgData['user_id'] = $user_id;
                        $data[] = $msgData;
                    }
                }
            }

            \app\company\logic\Message::send_message_list($data);

        }

    }

    //公告初审、终审
    public static function notice_pass($auditId, $check_opinion='')
    {
        $noticeInfo = M('com_notice')->where('id', $auditId)->find();

        if(!$noticeInfo)  return '公告数据不存在!';
        if( $noticeInfo['end_time'] < time() ) return '已过截止时间';

        $userId = session("user_com")['id'];

        switch ($noticeInfo['status']) {
            case 0:         //待初审
                if($noticeInfo['first_check_user_id'] != $userId)  return '你不是该公告相关初审人，不能审核';
                $saveData['first_check_time'] = time();
                $saveData['first_check_opinion'] = $check_opinion;
                break;
            case 1:         // 1待终审
                if($noticeInfo['last_check_user_id'] != $userId)  return '你不是该公告相关终审人，不能审核';
                $saveData['last_check_time'] = time();
                $saveData['last_check_opinion'] = $check_opinion;
                break;
            default:
                return '公告审核数据有误！';
                break;
        }

        $saveData['id']     = $auditId;
        $saveData['status'] = $noticeInfo['status'] + 1;

//        //审核通过
        DB::startTrans();//开启事务
        try{
            M('com_notice')->update($saveData);
            //发放记录人奖分
            SendIntegralNew::send($auditId, 1);
            DB::commit();//提交
        }catch (\Exception $e){
            DB::rollback();//回滚
            return $e->getMessage();
        }

        $auditInfo = $noticeInfo;
        $relation_id = $auditInfo['id'];
        //初审通过，后续事件
        if($noticeInfo['status'] < 1) {
            $user_id = $auditInfo['last_check_user_id'];
            $title = '当前有一条公告需要您审核(终审)';
            \app\company\logic\Message::send_message($title, $user_id, 1, 1, $relation_id);
        }

        //终审通过，后续事件 todo 可加入队列执行
        if($noticeInfo['status'] == 1){
            $msgData['relation_id'] = $relation_id;
            //记录人
            $msgData['user_id'] = $auditInfo['record_user_id'];
            $msgData['cate_type'] = 3;
            $msgData['type'] = 1;
            $msgData['title'] = '您有公告已通过';
            $data[] = $msgData;

            //消息推送范围人
            if($auditInfo['type'] == 2) {
                $sendTaskRelationUsers = db('com_task_relation')->where('com_id', $auditInfo['com_id'])->where('task_id', $auditId)->column('user_id');
                if($sendTaskRelationUsers) {
                    $msgData['title'] = '当前有一条公告已发布，请在任务/公告大厅查看';
                    foreach ($sendTaskRelationUsers as $user_id) {
                        $msgData['user_id'] = $user_id;
                        $data[] = $msgData;
                    }
                }
            }

            \app\company\logic\Message::send_message_list($data);

        }

    }

}
